package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Iterator;
import java.util.List;
import javax.swing.table.DefaultTableModel;
import vista.InterfazGraficaBuscarCliente;
import vista.Mensaje;
import modelo.Buscador;
import modelo.Cliente;
import modelo.ClienteDao;

public class ControladorBuscarCliente extends WindowAdapter implements ActionListener,MouseListener
{

	private Buscador controlador;
	private DefaultTableModel modeloTabla;
	private InterfazGraficaBuscarCliente interfazGrafica;
	
	public ControladorBuscarCliente(Buscador listener)
	{
	    	interfazGrafica= new InterfazGraficaBuscarCliente(listener.getVentana());
	    	controlador= listener;
	    	modeloTabla= new DefaultTableModel();
	    	
	    	interfazGrafica.addListener((WindowListener) this);
	    	interfazGrafica.addListener((MouseListener) this);
	    	interfazGrafica.addListener((ActionListener) this);
	    	
	    	interfazGrafica.visualizarVentana();
	}
	
	 private void cargarTabla()
	 {
	    	try
	    	{
	    	  List<Cliente> listaClientes = new ClienteDao().consultarClientesActivos();
	    	  Object[] encabezados= {"Codigo Cliente","Nombre Cliente"};
	    	  
	    	  Object[][] data= new Object[listaClientes.size()][encabezados.length];
	    	  
	    	  int i= 0;
	    	  
	    	  Iterator<Cliente> iterador= listaClientes.iterator();
	    	  Cliente cliente= null;
	    	  
	    	  while (iterador.hasNext())
	    	  {
	    		  cliente= iterador.next();
	    		  
	    		  data[i][0]= cliente.getCodCliente();
	    		  data[i][1]= cliente.getNombre();
	    		  
	    		  ++i;
	    	  }
	    	  
	    	  modeloTabla= new ModeloTabla(data,encabezados);
	    	  
	    	  
	    	}
	    	catch(Exception e)
	    	{
	    		Mensaje.mostrarError("Error cargando tabla");
	    		modeloTabla= new DefaultTableModel();
	    	}
	    	
	    	interfazGrafica.asignarDatosTabla(modeloTabla);
	   }
	
	
	@Override
	public void mouseClicked(MouseEvent arg0) 
	{
        int indiceSeleccionado= interfazGrafica.getFilaSeleccionada();
		
		if (indiceSeleccionado!=-1 && (modeloTabla instanceof ModeloTabla))
		{
			interfazGrafica.asignarCodigo((String) modeloTabla.getValueAt(indiceSeleccionado, 0));
			interfazGrafica.asignarNombre((String) modeloTabla.getValueAt(indiceSeleccionado, 1));
		}
		
	}

	@Override
	public void actionPerformed(ActionEvent e) 
	{
		if (e.getActionCommand().equalsIgnoreCase("ACEPTAR"))
		{
			controlador.asignarElementoBuscado(interfazGrafica.getCodigo());
			interfazGrafica.descargarMemoria();
		}
		else if (e.getActionCommand().equalsIgnoreCase("CANCELAR"))
		{
			controlador.asignarElementoBuscado("");
			interfazGrafica.descargarMemoria();
		}
		
	}
	
	public void windowClosing(WindowEvent evt)
	{
		controlador.asignarElementoBuscado("");
		interfazGrafica.descargarMemoria();
	}
	
	public void windowOpened(WindowEvent evt)
	{
		
		cargarTabla();
	}
	
	class ModeloTabla extends DefaultTableModel
	{
		ModeloTabla(Object data[][],Object[] encabezados)
		{
			super(data,encabezados);
		}
		
		 public boolean isCellEditable(int row,int col)
		 {
		        return false;
		 }
	}
	

	@Override
	public void mouseEntered(MouseEvent arg0) {}

	@Override
	public void mouseExited(MouseEvent arg0) {}

	@Override
	public void mousePressed(MouseEvent arg0) {}

	@Override
	public void mouseReleased(MouseEvent arg0) {}
	

}
